package org.jeecg.modules.online.desform.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.vo.DictModel;
import org.jeecg.modules.online.desform.entity.DesignForm;
import org.jeecg.modules.online.desform.entity.DesignFormData;
import org.jeecg.modules.online.desform.vo.TranslateData;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.servlet.ModelAndView;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * @Description: 表单设计
 * @Author: jeecg-boot
 * @Date: 2019-05-16
 * @Version: V1.0
 */
public interface IDesignFormService extends IService<DesignForm> {

	/**
	 * 添加一对多
	 * 
	 * @param designForm
	 */
	public void saveMain(DesignForm designForm);

	/**
	 * 修改一对多
	 * 
	 * @param designForm
	 * @param designFormDataList
	 */
	public void updateMain(DesignForm designForm, List<DesignFormData> designFormDataList);

	/**
	 * 删除一对多
	 * 
	 * @param id
	 */
	public void delMain(String id);

	/**
	 * 批量删除一对多
	 * 
	 * @param idList
	 */
	public void delBatchMain(Collection<? extends Serializable> idList);

	/**
	 * 根据code查询DesignForm
	 * 
	 * @param desformCode
	 * @return
	 */
	public DesignForm getByCode(String desformCode);

	/**
	 * 
	 * 查询表单浏览页面的数据
	 * 
	 * @param designForm
	 * @param dataId
	 * @param modelAndView
	 * @return
	 */

	public ModelAndView queryFormViewData(DesignForm designForm, String dataId, String onlineDataId, ModelAndView modelAndView);

	/**
	 * 查询表单浏览页面的数据
	 * 
	 * @param desformId
	 * @param dataId 表单设计数据json的数据ID
	 * @param onlineDataId online表数据ID
	 * @param modelAndView
	 * @return
	 */
	public ModelAndView queryFormViewById(String desformId, String dataId, String onlineDataId, ModelAndView modelAndView);

	/**
	 * 查询表单浏览页面的数据
	 *
	 * @param desformCode
	 * @param dataId  表单设计数据json的数据ID
	 * @param onlineDataId  online表数据ID
	 * @param modelAndView
	 * @return
	 */
	public ModelAndView queryFormViewByCode(String desformCode, String dataId, String onlineDataId,ModelAndView modelAndView);

	/**
	 * 查询表单浏览页面的数据（自动判断是否有移动端视图，有的话就走移动端视图）
	 *
	 * @param desformCode
	 * @param dataId  表单设计数据json的数据ID
	 * @param onlineDataId  online表数据ID
	 * @param modelAndView
	 * @return
	 */
	public ModelAndView queryFormAutoViewByCode(String desformCode, String dataId, String onlineDataId,ModelAndView modelAndView);

	/**
	 * 查询表单浏览页面的数据
	 *
	 * @param desformCode
	 * @param dataId       表单设计数据json的数据ID
	 * @param onlineDataId online表数据ID
	 * @param isExternal   是否是外部打开的链接
	 * @param modelAndView
	 * @return
	 */
	public ModelAndView queryFormViewByCode(String desformCode, String dataId, String onlineDataId, boolean isExternal, ModelAndView modelAndView);

	/**
	 * 查询出配置项中所有的字典类型
	 * 
	 * @param designForm
	 * @return
	 */
	public DesignForm queryAllDictItem(DesignForm designForm);

	/**
	 * (分页）快速重置所有表单设计器的索引
	 *
	 * @param rowIds
	 * @param pageSize 页大小
	 * @param batchSave 是否批量执行保存操作，批量操作无法判断是新增还是修改，所以只能用在强制重置索引上
	 * @return
	 */
	Result redoAllIndex(String rowIds, Integer pageSize, boolean batchSave);


	/**
	 * (分页）强制重置所有表单设计器的索引
	 */
	Result redoAllIndexForce(String rowIds, Integer pageSize);

    /**
     * 将模板设置为移动模板，如果之前已有移动模板，就会被取消，并设置新的模板
     *
     * @param parentCode
     * @param desformCode
     * @return
     */
    @Transactional(rollbackFor = Exception.class)
    boolean updateDefMobileViewStatus(String parentCode, String desformCode);

    /**
     * 翻译列表
     *
     * @param translateDataList
     * @return
     */
    Map<String, List<DictModel>> translateColumns(List<TranslateData> translateDataList);

}
